package com.lhy.mymall.controller;

import com.lhy.mymall.common.ApiRestResponse;
import com.lhy.mymall.exception.MallException;
import com.lhy.mymall.flter.UserFilter;
import com.lhy.mymall.service.CartService;
import com.lhy.mymall.vo.CartVO;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.swing.*;
import java.util.List;

/**
 * @author: 卢辉宇
 * @date: 2022/12/18 11:35
 * @description:
 */
@RestController
@RequestMapping("/cart")
public class CartController {
    @Resource
    CartService cartService;

    @PostMapping("/list")
    public ApiRestResponse list(){
        //service层列表业务逻辑。。。
        //内部获取用户id,防止用户横向越权
        List<CartVO> cartVOList = cartService.list(UserFilter.currentUser.getId());
        return ApiRestResponse.success(cartVOList);
    }

    /**
     *
     * @param productId 产品id
     * @param count 数量
     * @return 购物车列表
     */
    @PostMapping("/add")
    public ApiRestResponse add(Integer productId,Integer count) throws MallException {

        //调用service层的加入购物车的逻辑方法。。。
        //从过滤器中等到用户id
        Integer userId = UserFilter.currentUser.getId();
        List<CartVO> cartVOS = cartService.add(userId, productId, count);

        return ApiRestResponse.success(cartVOS);
    }

    /**
     * 更新购物车方法
     * @param productId
     * @param count
     * @return
     * @throws MallException
     */
    @PostMapping("/update")
    public ApiRestResponse update(Integer productId,Integer count) throws MallException {
        //调用service层的更新购物车的逻辑方法。。。
        //从过滤器中等到用户id
        Integer userId = UserFilter.currentUser.getId();
        List<CartVO> cartVOS = cartService.update(userId, productId, count);

        return ApiRestResponse.success(cartVOS);
    }

    /**
     * 删除购物车方法
     * @param productId
     * @return
     * @throws MallException
     */
    @PostMapping("/delete")
    public ApiRestResponse delete(Integer productId) throws MallException {
        //调用service层的删除购物车的逻辑方法。。。
        //从过滤器中等到用户id
        Integer userId = UserFilter.currentUser.getId();
        List<CartVO> cartVOS = cartService.delete(userId, productId);

        return ApiRestResponse.success(cartVOS);
    }

    /**
     * 单选中/不选中
     * @param productId
     * @param selected
     * @return
     * @throws MallException
     */
    @PostMapping("/selectOrNot")
    public ApiRestResponse selectOrNot(Integer productId,Integer selected) throws MallException {
        //调用service层的选中商品的逻辑方法。。。
        //从过滤器中等到用户id
        Integer userId = UserFilter.currentUser.getId();
        List<CartVO> cartVOS = cartService.selectOrNot(userId, productId,selected);

        return ApiRestResponse.success(cartVOS);
    }

    /**
     * 全选中/不选中
     * @param selected
     * @return
     * @throws MallException
     */
    @PostMapping("/selectAllOrNot")
    public ApiRestResponse selectAllOrNot(Integer selected) throws MallException {
        //调用service层的选中商品的逻辑方法。。。
        //从过滤器中等到用户id
        Integer userId = UserFilter.currentUser.getId();
        List<CartVO> cartVOS = cartService.selectAllOrNot(userId,selected);

        return ApiRestResponse.success(cartVOS);
    }

}
